########## METHODE DU PROFILE MOYEN ##########

#definition1: Le profil d'un individu est la matrice a L lignes et C colonnes.
#L est le nombre de classifieurs
#C est le nombre de classes

#definitio2: le profil moyen d'une classe.
#Je prends la matrice de profil pour chaque individu de la classe
#et je calcule la matrice moyenne de ces matrices individuelles.
RCM_profil_moyen = function(vecteur_score, kredit_validation) 
{
cat("Methode du profil moyen : \n")
profil_moyen_class0=matrix(-1,35,2)

	#somme contient le nombre d'individus de la classe 0
	somme = sum(kredit_validation$kredit-1)
	profil_moyen_class0[,1] = ((kredit_validation$kredit-1) %*% (1-vecteur_score))/somme
	profil_moyen_class0[,2] = ((kredit_validation$kredit-1) %*% vecteur_score)/somme
	namespm = c('classe0','classe1')
	colnames(profil_moyen_class0) = namespm
	
profil_moyen_class1=matrix(-1,35,2)

	somme2 = sum(kredit_validation$kredit)
	profil_moyen_class1[,1] = ((kredit_validation$kredit) %*% (1-vecteur_score))/somme2
	profil_moyen_class1[,2] = ((kredit_validation$kredit) %*% vecteur_score)/somme2
	colnames(profil_moyen_class1) = namespm

#definition 3: Distance entre la matrice de profil d'un individu 
#et la matrice de profil moyenne d'une classe, peut etre calculee 
#comme la distance du chi2

#Distance0
	vecteur1 = matrix(1,nrow(vecteur_score),1)
	profils0 = vecteur1%*%t(profil_moyen_class0)[1,] - (1-vecteur_score)
	profilscarre0 = profils0*profils0
	profils1 = vecteur1%*%t(profil_moyen_class0)[2,] - vecteur_score
	profilscarre1 = profils1*profils1
	profilscarre = profilscarre0 + profilscarre1
	distance0 = profilscarre %*% matrix(1,35,1)

#Distance1
	vecteur1 = matrix(1,nrow(vecteur_score),1)
	profils0 = vecteur1%*%t(profil_moyen_class1)[1,] - (1-vecteur_score)
	profilscarre0 = profils0*profils0
	profils1 = vecteur1%*%t(profil_moyen_class1)[2,] - vecteur_score
	profilscarre1 = profils1*profils1
	profilscarre = profilscarre0 + profilscarre1
	distance1 = profilscarre %*% matrix(1,35,1)

prediction_pm = matrix(0,nrow(kredit_validation),1)
prediction_pm=ifelse(distance0<distance1,0,1)
colnames(prediction_pm) = "prediction pm"
row.names(prediction_pm) = row.names(vecteur_score)

########## SUM UP PM ##########
MATRIX_REVOLUTION = matrix(-1,nrow(kredit_validation),2)
MATRIX_REVOLUTION[,1]=prediction_pm
MATRIX_REVOLUTION[,2] = kredit[row.names(vecteur_score),1]
row.names(MATRIX_REVOLUTION) = row.names(vecteur_score)
colnames(MATRIX_REVOLUTION)=c("pred_pm", "vraie")
print(MATRIX_REVOLUTION)

nb_erreur = xor(MATRIX_REVOLUTION[,1], MATRIX_REVOLUTION[,2])
proportion_erreur1 = sum(nb_erreur) / nrow(MATRIX_REVOLUTION)
cat("Proportion d'erreur : ", proportion_erreur1, "\n")

pred <- prediction(1-distance1, kredit_validation[,1])
perf <- performance(pred,"tpr", "fpr")
plot(perf, main="ROC curve", col=rainbow(10))

perf <- performance(pred, "auc")
cat("AUC : ",perf@y.values[[1]], "\n")

return (prediction_pm)
}